
// 1. const && 与 &&
// 2. 带模板的operator = 如何写
// 3. 注意默认构造函数的参数是T  其他的是MyPtr
// 4. 为什么类型要加T 而参数MyPtr不用加T(可能是加T就意味着参数MyPtr的类型被限制成与class MyPtr类型要一致吧)
// 5. 带template的构造函数不能在类中定义吗
 
 template<typename T>
 class MyPtr {
 
 
 public:
     MyPtr(MyPtr *t = nullptr) {
     }
 
     ~MyPtr() {
         if (ptr_)
             delete(ptr_);
     }
 
 
     MyPtr(MyPtr<T> && t);
     MyPtr &operator = (MyPtr && t);
 
     MyPtr(MyPtr & t) = delete;
     MyPtr &operator = (const MyPtr & t) = delete;
 
     T *operator*() {
         return *ptr_;
     }
 
     T& operator->() {
         return *ptr_;
     }
     T* ptr_;
 };
 
 
 template<typename T>
 MyPtr<T> & MyPtr<T>::operator = ( MyPtr&& t) {
 
     cout << "operator = call" << endl;

     return *this;

  }
 
 template<typename T>
 MyPtr<T>::MyPtr(MyPtr && t) {
 
     cout << "move constrcutor call" << endl;

 }
 



